"""
您可以参考以下示例代码，通过OpenAI或者DashScope的方式，调用通义千问VL模型处理本地文件。以下代码使用的示例图片为：test.png
使用OpenAI SDK或OpenAI兼容的HTTP方式来处理本地图像文件的步骤如下：

编码图像文件：读取本地图像文件并编码为BASE64格式。

传递BASE64数据：将编码后的BASE64数据传递给image_url参数，格式为data:image/{format};base64,{base64_image}，其中：

image/{format}：本地图像的格式。请根据实际的图像格式，将image/{format}设置为与支持的图片表格中Content Type对应的值。如：本地图像为jpg格式，则设置为image/jpeg。

base64_image：图像的BASE64数据。

调用模型：调用通义千问VL模型，并处理返回的结果。
"""
from openai import OpenAI
import os
import base64


#  base 64 编码格式
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")


base64_image = encode_image("test.png")
client = OpenAI(
    # 若没有配置环境变量，请用百炼API Key将下行替换为：api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen-vl-max-latest",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    # 需要注意，传入BASE64，图像格式（即image/{format}）需要与支持的图片列表中的Content Type保持一致。"f"是字符串格式化的方法。
                    # PNG图像：  f"data:image/png;base64,{base64_image}"
                    # JPEG图像： f"data:image/jpeg;base64,{base64_image}"
                    # WEBP图像： f"data:image/webp;base64,{base64_image}"
                    "image_url": {"url": f"data:image/png;base64,{base64_image}"},
                },
                {"type": "text", "text": "这是什么?"},
            ],
        }
    ],
)
print(completion.choices[0].message.content)